How sessions are managed in ASP.NET and ASP.NET Core

किसी भी वेब एप्प्लिकशन में सेशन का प्रबंधन एक महत्त्वपूर्ण घटक है। आइए समझते हैं कि ASP.NET और ASP.NET Core के अंतर्गत सेशन का मैनेजमेंट कैसे किया जाता है?

ASP.NET और ASP.NET Core दोनों में सेशन मैनेजमेंट मौजूद है, लेकिन उनकी प्रक्रिया और आर्किटेक्चर में कुछ महत्वपूर्ण अंतर हैं।

ASP.NET (Framework) में सेशन मैनेजमेंट

ASP.NET WebForms और ASP.NET MVC दोनों में Session State Management का समर्थन होता है। सेशन को स्टोर करने के लिए निम्नलिखित विकल्प होते हैं:

a) In-Process (InProc)

सेशन डेटा सर्वर की Memory (RAM) में स्टोर होता है। सबसे तेज़, लेकिन स्केलेबिलिटी में समस्या होती है। यदि एप्लिकेशन रीस्टार्ट हो जाए, तो सेशन डेटा खो जाता है।

Session["UserName"] = "Ajeet"; string user = Session["UserName"] as string;

b) State Server (OutProc)

सेशन डेटा ASP.NET State Server में स्टोर होता है। InProc की तुलना में धीमा, लेकिन स्केलेबल।

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" />

c) SQL Server

सेशन डेटा SQL Server Database में स्टोर होता है। अत्यधिक स्केलेबल और web farm सपोर्ट करता है।

<sessionState mode="SQLServer" sqlConnectionString="data source=SQLServer;initial catalog=SessionDB;Integrated Security=True" />

d) Custom Storage (Custom Mode)

डेवलपर अपनी जरूरत के अनुसार किसी NoSQL DB (जैसे Redis, MongoDB) या किसी अन्य स्टोरेज में सेशन डेटा को स्टोर कर सकते हैं।

<sessionState mode="Custom" customProvider="MyCustomSessionProvider" />

ASP.NET Core में सेशन मैनेजमेंट

ASP.NET Core में सेशन मैनेजमेंट थोड़ा अलग तरीके से काम करता है। कुछ महत्वपूर्ण बदलाव हुए हैं:

a) कोई InProc Mode नहीं है

ASP.NET Core में सेशन Distributed Cache आधारित होता है।

b) Middleware आधारित सेशन

ASP.NET Core में सेशन मैनेजमेंट को Middleware के रूप में जोड़ा जाता है।

builder.Services.AddDistributedMemoryCache(); 
builder.Services.AddSession(options => { 
  options.IdleTimeout = TimeSpan.FromMinutes(20); 
  options.Cookie.HttpOnly = true; 
  options.Cookie.IsEssential = true; 
});

c) सेशन डेटा स्टोर और उपयोग

ASP.NET Core में सेशन डेटा HttpContext.Session के माध्यम से एक्सेस किया जाता है।

HttpContext.Session.SetString("UserName", "Ajeet"); 
string user = HttpContext.Session.GetString("UserName");

d) Redis या SQL Server के साथ उपयोग

Redis Cache के साथ सेशन स्टोर करने के लिए:

builder.Services.AddStackExchangeRedisCache(options => { 
options.Configuration = "localhost:6379"; });

SQL Server के साथ उपयोग के लिए:

builder.Services.AddDistributedSqlServerCache(
  options => { options.ConnectionString = "Server=.;Database=SessionDB;Trusted_Connection=True;"; 
  options.SchemaName = "dbo"; 
  options.TableName = "Sessions"; 
});

ASP.NET और ASP.NET Core के सेशन मैनेजमेंट में मूलभूत अंतर

Feature ASP.NET (Framework) ASP.NET Core
Session Storage InProc, State Server, SQL Server, Custom Distributed Cache (Memory, Redis, SQL Server)
Session Setup Web.config में सेटिंग्स Middleware के माध्यम से
Session Handling Session["key"] HttpContext.Session.GetString()/SetString()
InProc Mode हां (Yes) नहीं (No)
State Server हां (Yes) नहीं (No)
Scalability कम (Limited) अधिक (High)
Performance तेज़ (InProc) Cache आधारित तेज़ Performance

निष्कर्ष

ASP.NET Core में सेशन मैनेजमेंट को अधिक स्केलेबल और क्लाउड-फ्रेंडली बनाया गया है। क्लासिक ASP.NET में InProc और State Server के विकल्प थे, जबकि ASP.NET Core में केवल Distributed Cache Based Session उपयोग होता है। Redis और SQL Server जैसी स्केलेबल स्टोरेज के लिए बेहतर समर्थन दिया गया है.


Next: ASP.NET Core में क्लास और सर्विस के बीच अंतर को गहराई से समझना

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Differences between in-process and out-of-process hosting models

Web Fundamental Concepts in Hindi for Beginners - FAQs with their Answers Part-1

Introduction to ASP.NET Core and Web Frameworks